// // 执行顺序：script start -> script end -> settimeout 
// console.log('script start')

// setTimeout(function(){
//  console.log('settimeout')
// })

// console.log('script end')


// console.log('**************************')

// // Promise自身是同步执行的立即函数, then和catch是异步的，并且是微任务，会在下一个事件循环中执行。
// // 执行顺序：script start -> promise1 -> promise1 end  -> script end -> promise2 -> settimeout 
// console.log('script start')
// let promise1 = new Promise(function (resolve) {
//  console.log('promise1')
//  resolve()
//  console.log('promise1 end')
// }).then(function () {
//  console.log('promise2')
// })
// setTimeout(function(){
//  console.log('settimeout')
// })
// console.log('script end')

// async / wait 
// 执行顺序：script start -> async1 start -> async2 -> script end -> async1 end
async function async1() {
  console.log('async1 start');
  // 等待async2执行完毕，才执行async1的后续语句。现在async2就是一个promise,会先执行这个promise，但它后面的then等语句会放进微任务队列中
  await async2();
  console.log('async1 end')
}
async function async2() {
  console.log('async2')
}
console.log('script start');
setTimeout(function () {
  console.log('settimeout')
})
async1();
console.log('script end')